﻿#define  _CRT_SECURE_NO_WARNINGS 1

//26 删除有序数中的重复项

//给你一个 升序排列 的数组 nums ，请你 原地 删除重复出现的元素，使每个元素 只出现一次 ，返回删除后数组的新长度。元素的 相对顺序 应该保持 一致 。
//由于在某些语言中不能改变数组的长度，所以必须将结果放在数组nums的第一部分。更规范地说，如果在删除重复项之后有 k 个元素，那么 nums 的前 k 个元素应该保存最终结果。
//将最终结果插入 nums 的前 k 个位置后返回 k 。
//不要使用额外的空间，你必须在 原地 修改输入数组 并在使用 O(1) 额外空间的条件下完成。
//来源：力扣（LeetCode）
//链接：https ://leetcode.cn/problems/remove-duplicates-from-sorted-array


int removeDuplicates(int* nums, int numsSize) 
{
    int cur = 0, dest = 0;
    while (cur < numsSize)
    {
        if (nums[cur] == nums[dest])
        {
            cur++;
        }
        else
        {
            dest++;
            nums[dest] = nums[cur];
            cur++;
        }
    }
    return dest + 1;
}

//
//#include<stdio.h>
//#include<string.h>
//#include<stdlib.h>
//int cmp_int(const void* a1, const void* a2)
//{
//	return *((int*)a1) - *((int*)a2);
//}
//int main()
//{
//	int  n = 0, num = 0, i = 0, j = 0, count = 0;
//	int k = 0;
//	scanf("%d %d", &n, &k);
//	int* a = (int*)malloc(sizeof(int) * n);
//
//	for (i = 0; i < n; i++)
//	{
//		scanf("%d", &a[i]);
//	}
//	qsort(a, sizeof(int), n, cmp_int);
//	for (i = 0; i < n - 1; i++)
//	{
//		for (j = i + 1; j < n; j++)
//		{
//			if (a[i] * a[j] <= (a[i] + a[j] + k))
//			{
//				count = count + (n - j);
//				count = count % (long long )(1e9 + 7);
//				break;
//			}
//		}
//	}
//
//	printf("%d", count);
//	return 0;
//}


//#include<stdio.h>
////质数
//int isZ(int a)
//{
//	for (int i = 2; i < a; i++)
//	{
//		if (a % i == 0)
//		{
//			return 0;
//		}
//	}
//	return 1;
//}
////回文数
//int isW(int n)
//{
//	int tmp = n;
//	int sum = 0;
//	while (tmp)
//	{
//		int k = tmp % 10;
//		sum = sum * 10 + k;
//		tmp = tmp / 10;
//	}
//	if (sum == n)
//	{
//		return 1;
//	}
//	else
//	{
//		return 0;
//	}
//}
//
//int main()
//{
//	int a = 0, b = 0;
//	scanf("%d%d", &a, &b);
//	int count = 0;
//	for (int i = a; i <= b; i++)
//	{
//		if (isW(i) == 1)
//		{
//			if(isZ(i)==1)
//              count++;
//		}
//			
//	}
//	printf("%d", count);
//	return 0;
//}

//#include<stdio.h>
//int gcd(int a, int b)
//{
//    if (a % b == 0)
//    {
//        return b;
//    }
//
//    return gcd(b, a % b);
//}
//
//int main()
//{
//    int n = 0;
//    scanf("%d", &n);
//    int i = 0;
//    for (i = 2;; i++)
//    {
//        int flag = 0;
//        int j = 0;
//        for ( j = 2; j < n; j++)
//        {
//            if (gcd(i, j) != 1)
//            {
//                flag++;
//            }
//            else
//            {
//                break;
//            }
//        }
//        if (flag == n - 2)
//        {
//            break;
//        }
//    }
//    printf("%d", i%(int)(1e9 + 7));
//    return 0;
//}

//求a%b
//依次输入a,b,
//(1 <= a的位数 <= 1e6)
//(1 <= b <= 1e9 + 7
//秦九韶算法 （a+b）mod c= a mod c + b mod c 
#include<stdio.h>
#include<string.h>
#define N 1000010
const int mod = 1e9 + 7;
char a[N];
int main()
{
    int b = 0;
    scanf("%s%d", a, &b);
    int len = strlen(a);
    long long ans = 0;
    for (int i = 0; i < len; i++)
    {
        ans = (ans * 10 % b + a[i] - '0') % b;
    }
    printf("%d", ans);
    return 0;
}